<?php

/**************************************************************************
* Source File	:  ComposanteMySQL.php
* Author        :  Amodeos - Herleman - Kuete
* Project name  :  Gestion Annuaire des anciens de l'UM2
* Modified   	:  18/05/2010
* Description	:  Definition de la classe ComposanteMySQL qui herite de la classe Composante
**************************************************************************/

//include
include 'Composante.php';
include 'FormationMySQL.php';


class ComposanteMySQL  extends Composante			
{
	//Attributes
	private $idComposante;	//L'identificateur de l'objet, recupere dans la BDD
	private static $listeComposantes = array();	//La liste des composantes
	
	
	
	//Constructeurs
	/**
	 * 	Constructeur permettant de creer un objet ComposanteMySQL.
	 * @param $idComp L'identifiant de l'objet
	 * @param $rue La rue ou se situe la composante
	 * @param $cp Le code postale de la ville ou se situe la composante
	 * @param $ville La nom de la ville ou se situe la composante
	 * @param $listeForm La liste des formations presentes dans la composante.
	 */
//	public function ComposanteMySQL ($idComp, $rue, $cp, $ville, $listeForm) {
//		parent::Composante($rue, $cp, $ville, $listeForm);
//		$this -> idComposante = $idComp;
//	}
	
	
	//Accesseurs et Modificateurs
	public function getIdComposante() {
		return $this -> idComposante;
	}
	

	public function setIdComposante($idComp) {
		$this -> idComposante = $idComp;
	}
	
	
	
	//Methodes importees de InterfaceSLD
public function save () {

		$bdd = Connection::getInstance();		
		if (empty($this->idComposante)) {	//Il s'agit d'une creation d'une nouvelle formation
			try {
				
				//Enregistrement dans la BDD
				$rue =	$this->getAdresseRue();
				$ville = $this->getAdresseVille();
				$cp= $this->getAdresseCp();
				$nom = $this->getNom();
				$description = $this->getDescription();
				$count = $bdd->query("INSERT INTO COMPOSANTE VALUES (NULL, '$rue', '$ville', '$cp', '$nom ', '$description ')");
				//Recuperation de l'identifiant generee
				$id = $bdd->lastInsertId();
				$this->idComposante = $id;
					
				//Enregistrement dans la liste des formations
					//Ajout de la nouvelle formation dans la liste des formations
			}
			catch (PDOException $erreur) {
				echo 'Erreur : '. $erreur->getMessage();
			}	
		}
		
		else {	//Il s'agit d'une mise a jour d'une formation
			try {
				//UPDATE en BDD
				$rue =	$this->getAdresseRue();
				$ville = $this->getAdresseVille();
				$cp= $this->getAdresseCp();
				$nom = $this->getNom();
				$description = $this->getDescription();
				$count = $bdd->query("UPDATE COMPOSANTE SET NOM= '$nom' , DESCRIPTION = '$description' , ADRESSERUE = '$rue' , ADRESSEVILLE = '$ville' , ADRESSECP = '$cp' WHERE IDCOMPOSANTE=$this->idComposante");
				//UPDATE dans la liste des formations
			}
			catch (PDOException $erreur) {
				echo 'Erreur : '. $erreur->getMessage();
			}
			
		}
	}
	
	public function load () {
		$bdd = Connection::getInstance();
		$idComp = $this->idComposante;

		$reponse = $bdd->query("SELECT * FROM COMPOSANTE WHERE IDCOMPOSANTE=$idComp");
		$donnees = $reponse->fetch();
		$this->setAdresseRue($donnees['ADRESSERUE']);
		$this->setAdresseCp($donnees['ADRESSECP']);
		$this->setAdresseVille($donnees['ADRESSEVILLE']);
		$this->setNom($donnees['NOM']);
		$this->setDescription($donnees['DESCRIPTION']);
		$reponse->closeCursor();
		
		//Chargement de la liste de ses formations
		$listeForm = FormationMySQL::getListeFormationsByComposante($idComp);
		$this->setListFormation($listeForm);
	}
	
	 public static function loadListe(){
	
		$bdd = Connection::getInstance();
		$reponse = $bdd->query("SELECT * FROM COMPOSANTE");
		$composantes = array();
		foreach ($reponse as $tmp){
			$composante = new ComposanteMySQL ();
			$composante->setIdComposante($tmp['IDCOMPOSANTE']);
			$composante->setNom($tmp['NOM']);
			$composante->setDescription($tmp['DESCRIPTION']);
			$composante->setAdresseRue($tmp['ADRESSERUE']);
			$composante->setAdresseVille($tmp['ADRESSEVILLE']);
			$composante->setAdresseCp($tmp['ADRESSECP']);
			$liste = FormationMySQL::getListeFormationsByComposante($tmp['IDCOMPOSANTE']);
			$composante->setListFormation($liste);
			$composantes[]=$composante;
		}
		return $composantes;
	}

	
	public function delete () {
		$bdd = Connection::getInstance();
		$idComposante = $this->getIdComposante();
		foreach($this->getListFormation() as $i) {
			$idFormation = $i->getIdFormation();
			$requete = "DELETE FROM PROMO WHERE IDFORMATION=$idFormation";
			$bdd->query($requete);
		}
		$requete = "DELETE FROM FORMATION WHERE IDCOMPOSANTE=$idComposante";
		$requete2 = "DELETE FROM COMPOSANTE WHERE IDCOMPOSANTE=$idComposante";
		$bdd->query($requete);
		$bdd->query($requete2);
	}
		
	
	/**
	 * Fonction statique permettant de recuperer la liste des composantes dans 
	 * la base de donnees, et de retourner cette liste sous forme de tableau
	 */
	public static function getListeComposantes () {
		if ( (sizeof(self::$listeComposantes)) == 0 ) {
			$listeCompos = array();
			$bdd = Connection::getInstance();
			
			$reponse = $bdd->query("SELECT * FROM COMPOSANTE");
			$donnees = $reponse->fetch();
			
			while ($donnees) {
				//Creation de l'objet ComposanteMySQL
				$composante = new ComposanteMySQL();
				$composante->idComposante = $donnees['IDCOMPOSANTE'];
				$composante->setAdresseRue($donnees['ADRESSERUE']);
				$composante->setAdresseCp($donnees['ADRESSECP']);
				$composante->setAdresseVille($donnees['ADRESSEVILLE']);
				
				//Recuperation de sa liste de formations et ajout a la composante
				$listForm = array();
				$listForm = FormationMySQL::getListeFormationsByComposante($donnees['IDCOMPOSANTE']);
				$composante->setListFormation($listForm);
				//Ajout de l'objet dans la liste des composantes
				$listeCompos[] = $composante;
				//Element suivant
				$donnees = $reponse->fetch();
			}
			self::$listeComposantes = $listeCompos;
		}
		
		//On a recuperer toutes les composantes de la BDD
		
		return self::$listeComposantes;
	}
	
	public function reloadFormations() {
		$listForm = FormationMySQL::getListeFormationsByComposante($this->getIdComposante());
		$this->setListFormation($listForm);
	} 
	
	
	
	//Methodes
	public function ajouterFormation ($formation) {
		//verifie que la formation n'existe pas deja dans la composante
		$indice = array_search($formation, $this->listFormation);
		if ($indice === false) {	//Cette formation n'existe pas dans la liste 
			//ajout de la nouvelle formation en fin de tableau
			$this -> listFormation[] = $formation;
		}
		$formation->save();
		
	} 
	
	public function modifierInfosComposante ($rue, $cp, $ville, $listeFormation) {
		//mise a jour des informations
		$this -> adresseRue = $rue;
		$this -> adresseCp = $cp;
		$this -> adresseVille = $ville;
		$this -> listFormation = $listeFormation;
	}
	 	
	public function supprimerFormation ($formation) {
		//Recherche de la formation a supprimer
		$indice = array_search($formation, $this -> listFormation);
		
		//Suppression de la formation du tableau
		unset($this -> listFormation [$indice]);
		
		//Suppression de la formation de la BDD
		$formation -> delete();
	}
	 
	

} // End Class ComposanteMySQL


//Test des fonctions
//$listeCompos = ComposanteMySQL::getListeComposantes();
//echo 'Taille = '. sizeof($listeCompos) .'<br>';
//print_r($listeCompos);

?>

